﻿using System;
using System.Windows.Forms;

namespace JMI_Nucleo.View.Form_Base
{
    public partial class FrmBaseCadastro : JMI_Nucleo.View.Form_Base.FrmBase
    {
        private char _acao;
        private string _cidadePadrao;
        private string _ufPadrao;

        public FrmBaseCadastro()
        {
            InitializeComponent();
        }

        public char Acao
        {
            get { return _acao; }
            set { _acao = value; }
        }
        public string CidadePadrao 
        { 
            get { return _cidadePadrao; } 
            set { _cidadePadrao = value; } 
        }
        public string UfPadrao 
        { 
            get { return _ufPadrao; } 
            set { _ufPadrao = value; } 
        }

        protected void Incluir()
        {
            Acao = 'I';

            BtnAlterar.Enabled = false;
            BtnExcluir.Enabled = false;
            BtnSalvar.Enabled = true;
            BtnConfirma.SendToBack();
            BtnSalvar.BringToFront();
            BtnCancelar.Enabled = true;

            base.Limpar(this.Controls);
            base.IniciarControle();

            BtnIncluir.Enabled = false;
            SetCaixaAltaleRecursivo(this.Controls);
            MudaControleRecursivo(this.Controls, 1);
        }

        protected void Alterar()
        {
            Acao = 'A';

            BtnIncluir.Enabled = false;
            BtnAlterar.Enabled = false;
            BtnExcluir.Enabled = false;
            BtnSalvar.Enabled = true;
            BtnConfirma.SendToBack();
            BtnSalvar.BringToFront();
            BtnCancelar.Enabled = true;

            SetCaixaAltaleRecursivo(this.Controls);
            MudaControleRecursivo(this.Controls, 1);
        }

        protected void Excluir()
        {
            Acao = 'E';

            BtnIncluir.Enabled = false;
            BtnAlterar.Enabled = false;
            BtnExcluir.Enabled = false;
            BtnSalvar.Enabled = false;
            BtnConfirma.Enabled = true;
            BtnConfirma.BringToFront();
            BtnSalvar.SendToBack();
            BtnCancelar.Enabled = true;
            MudaControleRecursivo(this.Controls, 2);
        }

        protected virtual void Salvar(bool sucesso = true)
        {
            BtnIncluir.Enabled = sucesso;
            BtnAlterar.Enabled = false;
            BtnExcluir.Enabled = false;
            BtnSalvar.Enabled = !sucesso;
            BtnConfirma.Enabled = false;
            BtnConfirma.SendToBack();
            BtnSalvar.BringToFront();
            BtnCancelar.Enabled = false;
            MudaControleRecursivo(this.Controls, 2);
        }

        protected void Confirmar(bool sucesso = true)
        {
            BtnIncluir.Enabled = sucesso;
            BtnAlterar.Enabled = false;
            BtnExcluir.Enabled = false;
            BtnSalvar.Enabled = false;
            BtnConfirma.Enabled = !sucesso;
            BtnConfirma.SendToBack();
            BtnSalvar.BringToFront();
            BtnCancelar.Enabled = false;
            MudaControleRecursivo(this.Controls, 2);
        }

        protected void Cancelar()
        {
            BtnIncluir.Enabled = true;
            BtnAlterar.Enabled = false;
            BtnExcluir.Enabled = false;
            BtnSalvar.Enabled = false;
            BtnConfirma.Enabled = false;
            BtnConfirma.SendToBack();
            BtnSalvar.BringToFront();
            BtnCancelar.Enabled = false;
            MudaControleRecursivo(this.Controls, 2);
        }

        protected virtual void Pesquisar()
        {
            BtnIncluir.Enabled = false;
            BtnAlterar.Enabled = true;
            BtnExcluir.Enabled = true;
            BtnSalvar.Enabled = false;
            BtnConfirma.Enabled = false;
            BtnConfirma.SendToBack();
            BtnSalvar.BringToFront();
            BtnCancelar.Enabled = false;
            TxtStatus.Text = String.Empty;
        }
       
        protected virtual void MudaControle(byte Status = 1)
        {
            int x = 0;
            Control ctrl;
            /// <Summary>
            /// 1 - Habilita controles
            /// 2 - Desablita controles
            /// </Summary>
            for (x = 0; x < Controls.Count; x++)
            {
                ctrl = Controls[x];
                if (ctrl.Name == "pnlConteudo")
                {
                    foreach (Control controle in ctrl.Controls)
                    {
                        if (controle.Name == "TxtCodigo") { continue; }
                        if (controle is Label) { continue; }
                        MudaVisual(controle, Status);
                    }
                    break;
                }
            }
        }

        protected virtual void MudaControleRecursivo(System.Windows.Forms.Control.ControlCollection Controles, byte Status = 1)
        {
            /// <Summary>
            /// 1 - Habilita controles
            /// 2 - Desablita controles
            /// </Summary>
            foreach (Control controle in Controles)
            {
                if (controle.Name == "TxtCodigo") { continue; }
                if (controle is Label) { continue; }
                MudaVisual(controle, Status);
                MudaControleRecursivo(controle.Controls, Status);
            } 
        }

        protected virtual void SetCaixaAltaleRecursivo(System.Windows.Forms.Control.ControlCollection Controles)
        {
            foreach (Control controle in Controles)
            {
                if (controle is Label) { continue; }
                if (controle.Name.Contains("Email")) { continue; }
                if (controle.Name.Contains("Site")) { continue; }
                if (controle.Name.Contains("TxtDataAlteracao")) { continue; }  
                CaixaAlta(controle);
                SetCaixaAltaleRecursivo(controle.Controls);
            }
        }

        private void BtnIncluir_Click(object sender, EventArgs e)
        {
            Incluir();
        }

        private void BtnAlterar_Click(object sender, EventArgs e)
        {
            Alterar();
        }

        private void BtnExcluir_Click(object sender, EventArgs e)
        {
            Excluir();
        }

        private void BtnSalvar_Click(object sender, EventArgs e)
        {
            //Salvar();
        }

        private void BtnConfirma_Click(object sender, EventArgs e)
        {
            Confirmar();
        }

        private void BtnPesquisa_Click(object sender, EventArgs e)
        {
            Pesquisar();
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            Cancelar();
        }

        private void FrmBaseCadastro_KeyUp(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F2: Incluir(); break;
                case Keys.F3: Alterar(); break;
                case Keys.F4: Excluir(); break;
                case Keys.F5: Salvar(); break;
                case Keys.F6: Cancelar(); break;
                case Keys.F7: Pesquisar(); break;
                case Keys.F8: Limpar(this.Controls); break;
                case Keys.Escape: Close(); break;
            }
        }

        private void BtnLimpar_Click(object sender, EventArgs e)
        {
            Acao = '0';

            base.IniciarControle(false);
            MudaControleRecursivo(this.Controls, 2);
            BtnIncluir.Focus();
        }       
    }
}
